package com.itheima.gamedemo;

import java.util.*;

import static java.util.Collections.sort;

/**
 * 房间 操作类
 */
public class Room {
    //1.先准备54张牌 创建list集合  给房间使用
    private List<GameCard> allCards =new ArrayList<>();
    //2.初始化54张牌 给他们赋值 实例代码块
    {
        //2.1 创建两个数组 分别存放花色和牌名
        String[] colors = {"♥","♠","♣","♦"};
        String[] sizes = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //2.2设置一个num  为了方便比较大小
        int num = 0;
        //2.3 得到54张牌 分别带有color和 size   for循环
        for (String size: sizes){
            num++;//设置牌的大小 sizes的数组遍历1次 从小到大 num++
            for (String color: colors){
                //2.4 创建一个GameCard对象 把每一个值赋给这些卡 然后添加到集合
                GameCard card = new GameCard(color, size, num);
                //2.5把牌添加到集合
                allCards.add(card);
            }
        }
        //2.4把大小王添加到集合中 组成54张牌
        // 此时集合中已经保存了51张牌（且带有花色和牌的大小）
        GameCard card1 = new GameCard("🃏", "", ++num);
        GameCard card2 = new GameCard("👲", "", ++num);
        allCards.add(card1);
        allCards.add(card2);
    }


    //开始游戏
    public void start() {
        //3.洗牌 打印一下牌
        System.out.println("洗牌前："+allCards);
        Collections.shuffle(allCards);
        System.out.println("洗牌后："+allCards);

        //4.发牌 有三个玩家 创建三个map集合 键：玩家名 值：玩家牌
        Map<String, List<GameCard>> players = new HashMap<>();
        //4.1创建三个玩家
        List<GameCard> al = new ArrayList<>();
        List<GameCard> qjc = new ArrayList<>();
        List<GameCard> zy = new ArrayList<>();
        //4.2 遍历牌 然后把三个玩家的牌 添加到map集合的值 还没抢地主 allCards.size 要-3
        for (int i = 0; i < allCards.size() - 3; i++) {
            //得到这张牌
            GameCard cards = allCards.get(i);
            //判断 添加到哪个玩家 (i%3==0) (i%3 == 1) (i%3 == 2)
            if (i % 3 == 0) {
                al.add(cards);//阿良得到这张牌
            }else if (i % 3 == 1) {
                qjc.add(cards);//齐静春得到这张牌
            }else {
                zy.add(cards);//左右得到这张牌
            }
        }
        //4.3 把17张牌随机发给他们
        players.put("阿良",al);
        players.put("齐静春",qjc);
        players.put("左右",zy);
        //4.4 抢地主 把最后三张牌发给齐静春
        qjc.addAll(allCards.subList(allCards.size()-3,allCards.size()));

        //5.对牌进行排序
        sortCards(al);
        sortCards(qjc);
        sortCards(zy);

        //6.看牌 遍历map集合 获取对应的键和值
        for (Map.Entry<String, List<GameCard>> entry : players.entrySet()) {
            String names = entry.getKey();
            List<GameCard> Cards = entry.getValue();
            System.out.println(names+"的牌是："+Cards);
        }




    }

    public void sortCards(List<GameCard>  cards){
        Collections.sort(cards, (o1, o2) -> o2.getNum() - o1.getNum());
    }







}
